// 导入 http 模块
import http from 'wechat-http'
/**
 * 配置接口基础路径
 */
http.baseURL = 'https://live-api.itheima.net'

// 请求拦截器
// 保证登录以后所有的接口都带上token请求头
http.intercept.request = params => {
  // 获取全局Token
  const { token } = getApp()
  // 如果有就往原来的请求头基础上继续拼接
  if (token) {
    params.header = {
      // 注意展开，先后覆盖的问题
      Authorization: token,
      ...params.header
    }
  }
  // 记得拦截需要返回
  return params
}

/**
 * 配置响应拦截器
 */
http.intercept.response = async (res) => {
  // console.log(res)
  if (res.statusCode === 401) {
    // console.log(res);
    // 避免出现死循环，进行如下 👇
    if (res.config.url.includes('/refreshToken')) {
      // 读取当前历史栈
      const pageStack = getCurrentPages()
      // 取出当前页面路径，登录成功能跳转到该页面
      const lastPage = pageStack[pageStack.length - 1]
      // 取出当前页面路径，登录成功能跳转到该页面
      const redirectURL = lastPage.route
      // 引导用户到登录页面
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${redirectURL}`,
      })
    }
    // 获取全局应用实例
    const app = getApp()
    // 如果核对到连 refresh_token 都没有，直接无需进行后续更新
    if (!app.refresh_token) return
    // 使用 refreshToken 更新 token
    // const res = await http({
    const result = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        // 这时要注意使用的是 refresh_token
        Authorization: app.refresh_token,
      },
    })
    console.log(result);
    // 更新 token 和 refresh_token
    // app.setToken(res.data.token, res.data.refreshToken)
    app.setToken(result.data.token, result.data.refreshToken)

    // console.log(res.config);
    return http({
      url: res.config.url,
      header: {
        Authorization: app.token,
      },
    })
  }
  // 过滤接口返回的数据
  return res.data
}
/**
 * 挂载方法到全局
 */
wx.http = http
/**
 * 模块导出
 */
export default http